package com.learn.lock.vol;

/**
 * @author : Yu.Tan
 * @date : 2023/5/9 15:03
 * @desc : **
 */
public class SingletonDcl {
    public static volatile SingletonDcl singletonDcl;

    private SingletonDcl() {
    }

    /**
     * new SingletonDcl()
     * 1、分配内存空间
     * 2、初始化对象
     * 3、将内存空间的地址赋值给对应的引用
     * PS: 可能发生 对指令进行重排序  2、3步骤顺序发生改变
     */
    public static SingletonDcl getInstance() {
        if (singletonDcl == null) {
            synchronized (SingletonDcl.class) {
                if (singletonDcl == null) {
                    singletonDcl = new SingletonDcl();
                }
            }
        }
        return singletonDcl;
    }
}
